1 /*
2  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
3  * Copyright (c) 2012-2014 - Andre Roth <neolynx@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation version 2.1 of the License.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18  */
19 
20 /**
21  * @file descriptors.h
22  * @ingroup dvb_table
23  * @brief Provides a way to handle MPEG-TS descriptors found on Digital TV
24  * 	streams.
25  * @copyright GNU Lesser General Public License version 2.1 (LGPLv2.1)
26  * @author Mauro Carvalho Chehab
27  * @author Andre Roth
28  *
29  * @par Relevant specs
30  * The descriptors herein are defined on the following specs:
31  * - ISO/IEC 13818-1
32  * - ETSI EN 300 468 V1.11.1 (2010-04)
33  * - SCTE 35 2004
34  * - http://www.etherguidesystems.com/Help/SDOs/ATSC/Semantics/Descriptors/Default.aspx
35  * - http://www.coolstf.com/tsreader/descriptors.html
36  * - ABNT NBR 15603-1 2007
37  * - ATSC A/65:2009 spec
38  *
39  * @par Bug Report
40  * Please submit bug reports and patches to linux-media@vger.kernel.org
41  */
42 
43 module libdvbv5_d.descriptors;
44 
45 import core.sys.posix.unistd;
46 
47 import libdvbv5_d.dvb_fe: dvb_v5_fe_parms;
48 
49 extern (C):
50 
51 /**
52  * @brief Maximum size of a table session to be parsed
53  * @ingroup dvb_table
54  */
55 enum DVB_MAX_PAYLOAD_PACKET_SIZE = 4096;
56 
57 /**
58  * @brief number of bytes for the descriptor's CRC check
59  * @ingroup dvb_table
60  */
61 enum DVB_CRC_SIZE = 4;
62 
63 //struct dvb_v5_fe_parms;
64 
65 /**
66  * @brief Function prototype for a function that initializes the
67  *	  descriptors parsing on a table
68  * @ingroup dvb_table
69  *
70  * @param parms		Struct dvb_v5_fe_parms pointer
71  * @param buf		Buffer with data to be parsed
72  * @param buflen	Size of the buffer to be parsed
73  * @param table		pointer to a place where the allocated memory with the
74  *			table structure will be stored.
75  */
76 alias dvb_table_init_func = void function (
77     dvb_v5_fe_parms* parms,
78     const(ubyte)* buf,
79     ssize_t buflen,
80     void** table);
81 
82 /**
83  * @brief Table with all possible descriptors
84  * @ingroup dvb_table
85  */
86 extern __gshared const(dvb_table_init_func)[256] dvb_table_initializers;
87 
88 /* Deprecated */
89 
90 /* _DOXYGEN */
91 
92 /**
93  * @struct dvb_desc
94  * @brief Linked list containing the several descriptors found on a
95  * 	  MPEG-TS table
96  * @ingroup dvb_table
97  *
98  * @param type		Descriptor type
99  * @param length	Length of the descriptor
100  * @param next		pointer to the dvb_desc descriptor
101  * @param data		Descriptor data
102  */
103 struct dvb_desc
104 {
105     align (1):
106 
107     ubyte type;
108     ubyte length;
109     dvb_desc* next;
110 
111     ubyte[] data;
112 }
113 
114 /* _DOXYGEN */
115 
116 /**
117  * @brief Converts from BCD to CPU integer internal representation
118  * @ingroup dvb_table
119  *
120  * @param bcd	value in BCD encoding
121  */
122 uint dvb_bcd (uint bcd);
123 
124 /**
125  * @brief dumps data into the logs in hexadecimal format
126  * @ingroup dvb_table
127  *
128  * @param parms		Struct dvb_v5_fe_parms pointer
129  * @param prefix	String to be printed before the dvb_hexdump
130  * @param buf		Buffer to hex dump
131  * @param len		Number of bytes to show
132  */
133 void dvb_hexdump (
134     dvb_v5_fe_parms* parms,
135     const(char)* prefix,
136     const(ubyte)* buf,
137     int len);
138 
139 /**
140  * @brief parse MPEG-TS descriptors
141  * @ingroup dvb_table
142  *
143  * @param parms		Struct dvb_v5_fe_parms pointer
144  * @param buf		Buffer with data to be parsed
145  * @param buflen	Size of the buffer to be parsed
146  * @param head_desc	pointer to the place to store the parsed data
147  *
148  * This function takes a buf as argument and parses it to find the
149  * MPEG-TS descriptors inside it, creating a linked list.
150  *
151  * On success, head_desc will be allocated and filled with a linked list
152  * with the descriptors found inside the buffer.
153  *
154  * This function is used by the several MPEG-TS table handlers to parse
155  * the entire table that got read by dvb_read_sessions and other similar
156  * functions.
157  *
158  * @return Returns 0 on success, a negative value otherwise.
159  */
160 int dvb_desc_parse (
161     dvb_v5_fe_parms* parms,
162     const(ubyte)* buf,
163     ushort buflen,
164     dvb_desc** head_desc);
165 
166 /**
167  * @brief frees a dvb_desc linked list
168  * @ingroup dvb_table
169  *
170  * @param list	struct dvb_desc pointer.
171  */
172 void dvb_desc_free (dvb_desc** list);
173 
174 /**
175  * @brief prints the contents of a struct dvb_desc linked list
176  * @ingroup dvb_table
177  *
178  * @param parms		Struct dvb_v5_fe_parms pointer
179  * @param desc		struct dvb_desc pointer.
180  */
181 void dvb_desc_print (dvb_v5_fe_parms* parms, dvb_desc* desc);
182 
183 /**
184  * @brief Function prototype for the descriptors parsing init code
185  * @ingroup dvb_table
186  *
187  * @param parms		Struct dvb_v5_fe_parms pointer
188  * @param buf		buffer with the content of the descriptor
189  * @param desc		struct dvb_desc pointer
190  */
191 alias dvb_desc_init_func = int function (
192     dvb_v5_fe_parms* parms,
193     const(ubyte)* buf,
194     dvb_desc* desc);
195 
196 /**
197  * @brief Function prototype for the descriptors parsing print code
198  * @ingroup dvb_table
199  *
200  * @param parms		Struct dvb_v5_fe_parms pointer
201  * @param desc		struct dvb_desc pointer
202  */
203 alias dvb_desc_print_func = void function (
204     dvb_v5_fe_parms* parms,
205     const(dvb_desc)* desc);
206 
207 /**
208  * @brief Function prototype for the descriptors memory free code
209  * @ingroup dvb_table
210  *
211  * @param desc		pointer to struct dvb_desc pointer to be freed
212  */
213 alias dvb_desc_free_func = void function (dvb_desc* desc);
214 
215 /**
216  * @struct dvb_descriptor
217  * @brief Contains the parser information for the MPEG-TS parser code
218  * @ingroup dvb_table
219  *
220  * @param name		String containing the name of the descriptor
221  * @param init		Pointer to a function to initialize the descriptor
222  *			parser. This function fills the descriptor-specific
223  *			internal structures
224  * @param print		Prints the content of the descriptor
225  * @param free		Frees all memory blocks allocated by the init function
226  * @param size		Descriptor's size, in bytes.
227  */
228 struct dvb_descriptor
229 {
230     const(char)* name;
231     dvb_desc_init_func init;
232     dvb_desc_print_func print;
233     dvb_desc_free_func free;
234     ssize_t size;
235 }
236 
237 /**
238  * @brief Contains the parsers for the several descriptors
239  * @ingroup dvb_table
240  */
241 extern __gshared const(dvb_descriptor)[] dvb_descriptors;
242 
243 /**
244  * @enum descriptors
245  * @brief List containing all descriptors used by Digital TV MPEG-TS
246  * @ingroup dvb_table
247  *
248  * @var video_stream_descriptor
249  *	@brief	video_stream descriptor - ISO/IEC 13818-1
250  * @var audio_stream_descriptor
251  *	@brief	audio_stream descriptor - ISO/IEC 13818-1
252  * @var hierarchy_descriptor
253  *	@brief	hierarchy descriptor - ISO/IEC 13818-1
254  * @var registration_descriptor
255  *	@brief	registration descriptor - ISO/IEC 13818-1
256  * @var ds_alignment_descriptor
257  *	@brief	ds_alignment descriptor - ISO/IEC 13818-1
258  * @var target_background_grid_descriptor
259  *	@brief	target_background_grid descriptor - ISO/IEC 13818-1
260  * @var video_window_descriptor
261  *	@brief	video_window descriptor - ISO/IEC 13818-1
262  * @var conditional_access_descriptor
263  *	@brief	conditional_access descriptor - ISO/IEC 13818-1
264  * @var iso639_language_descriptor
265  *	@brief	iso639_language descriptor - ISO/IEC 13818-1
266  * @var system_clock_descriptor
267  *	@brief	system_clock descriptor - ISO/IEC 13818-1
268  * @var multiplex_buffer_utilization_descriptor
269  *	@brief	multiplex_buffer_utilization descriptor - ISO/IEC 13818-1
270  * @var copyright_descriptor
271  *	@brief	copyright descriptor - ISO/IEC 13818-1
272  * @var maximum_bitrate_descriptor
273  *	@brief	maximum_bitrate descriptor - ISO/IEC 13818-1
274  * @var private_data_indicator_descriptor
275  *	@brief	private_data_indicator descriptor - ISO/IEC 13818-1
276  * @var smoothing_buffer_descriptor
277  *	@brief	smoothing_buffer descriptor - ISO/IEC 13818-1
278  * @var std_descriptor
279  *	@brief	std descriptor - ISO/IEC 13818-1
280  * @var ibp_descriptor
281  *	@brief	ibp descriptor - ISO/IEC 13818-1
282  * @var mpeg4_video_descriptor
283  *	@brief	mpeg4_video descriptor - ISO/IEC 13818-1
284  * @var mpeg4_audio_descriptor
285  *	@brief	mpeg4_audio descriptor - ISO/IEC 13818-1
286  * @var iod_descriptor
287  *	@brief	iod descriptor - ISO/IEC 13818-1
288  * @var sl_descriptor
289  *	@brief	sl descriptor - ISO/IEC 13818-1
290  * @var fmc_descriptor
291  *	@brief	fmc descriptor - ISO/IEC 13818-1
292  * @var external_es_id_descriptor
293  *	@brief	external_es_id descriptor - ISO/IEC 13818-1
294  * @var muxcode_descriptor
295  *	@brief	muxcode descriptor - ISO/IEC 13818-1
296  * @var fmxbuffersize_descriptor
297  *	@brief	fmxbuffersize descriptor - ISO/IEC 13818-1
298  * @var multiplexbuffer_descriptor
299  *	@brief	multiplexbuffer descriptor - ISO/IEC 13818-1
300  * @var content_labeling_descriptor
301  *	@brief	content_labeling descriptor - ISO/IEC 13818-1
302  * @var metadata_pointer_descriptor
303  *	@brief	metadata_pointer descriptor - ISO/IEC 13818-1
304  * @var metadata_descriptor
305  *	@brief	metadata descriptor - ISO/IEC 13818-1
306  * @var metadata_std_descriptor
307  *	@brief	metadata_std descriptor - ISO/IEC 13818-1
308  * @var AVC_video_descriptor
309  *	@brief	AVC_video descriptor - ISO/IEC 13818-1
310  * @var ipmp_descriptor
311  *	@brief	ipmp descriptor - ISO/IEC 13818-1
312  * @var AVC_timing_and_HRD_descriptor
313  *	@brief	AVC_timing_and_HRD descriptor - ISO/IEC 13818-1
314  * @var mpeg2_aac_audio_descriptor
315  *	@brief	mpeg2_aac_audio descriptor - ISO/IEC 13818-1
316  * @var flexmux_timing_descriptor
317  *	@brief	flexmux_timing descriptor - ISO/IEC 13818-1
318  * @var network_name_descriptor
319  *	@brief	network_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
320  * @var service_list_descriptor
321  *	@brief	service_list descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
322  * @var stuffing_descriptor
323  *	@brief	stuffing descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
324  * @var satellite_delivery_system_descriptor
325  *	@brief	satellite_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
326  * @var cable_delivery_system_descriptor
327  *	@brief	cable_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
328  * @var VBI_data_descriptor
329  *	@brief	VBI_data descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
330  * @var VBI_teletext_descriptor
331  *	@brief	VBI_teletext descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
332  * @var bouquet_name_descriptor
333  *	@brief	bouquet_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
334  * @var service_descriptor
335  *	@brief	service descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
336  * @var country_availability_descriptor
337  *	@brief	country_availability descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
338  * @var linkage_descriptor
339  *	@brief	linkage descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
340  * @var NVOD_reference_descriptor
341  *	@brief	NVOD_reference descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
342  * @var time_shifted_service_descriptor
343  *	@brief	time_shifted_service descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
344  * @var short_event_descriptor
345  *	@brief	short_event descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
346  * @var extended_event_descriptor
347  *	@brief	extended_event descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
348  * @var time_shifted_event_descriptor
349  *	@brief	time_shifted_event descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
350  * @var component_descriptor
351  *	@brief	component descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
352  * @var mosaic_descriptor
353  *	@brief	mosaic descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
354  * @var stream_identifier_descriptor
355  *	@brief	stream_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
356  * @var CA_identifier_descriptor
357  *	@brief	CA_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
358  * @var content_descriptor
359  *	@brief	content descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
360  * @var parental_rating_descriptor
361  *	@brief	parental_rating descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
362  * @var teletext_descriptor
363  *	@brief	teletext descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
364  * @var telephone_descriptor
365  *	@brief	telephone descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
366  * @var local_time_offset_descriptor
367  *	@brief	local_time_offset descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
368  * @var subtitling_descriptor
369  *	@brief	subtitling descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
370  * @var terrestrial_delivery_system_descriptor
371  *	@brief	terrestrial_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
372  * @var multilingual_network_name_descriptor
373  *	@brief	multilingual_network_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
374  * @var multilingual_bouquet_name_descriptor
375  *	@brief	multilingual_bouquet_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
376  * @var multilingual_service_name_descriptor
377  *	@brief	multilingual_service_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
378  * @var multilingual_component_descriptor
379  *	@brief	multilingual_component descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
380  * @var private_data_specifier_descriptor
381  *	@brief	private_data_specifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
382  * @var service_move_descriptor
383  *	@brief	service_move descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
384  * @var short_smoothing_buffer_descriptor
385  *	@brief	short_smoothing_buffer descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
386  * @var frequency_list_descriptor
387  *	@brief	frequency_list descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
388  * @var partial_transport_stream_descriptor
389  *	@brief	partial_transport_stream descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
390  * @var data_broadcast_descriptor
391  *	@brief	data_broadcast descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
392  * @var scrambling_descriptor
393  *	@brief	scrambling descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
394  * @var data_broadcast_id_descriptor
395  *	@brief	data_broadcast_id descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
396  * @var transport_stream_descriptor
397  *	@brief	transport_stream descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
398  * @var DSNG_descriptor
399  *	@brief	DSNG descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
400  * @var PDC_descriptor
401  *	@brief	PDC descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
402  * @var AC_3_descriptor
403  *	@brief	AC_3 descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
404  * @var ancillary_data_descriptor
405  *	@brief	ancillary_data descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
406  * @var cell_list_descriptor
407  *	@brief	cell_list descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
408  * @var cell_frequency_link_descriptor
409  *	@brief	cell_frequency_link descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
410  * @var announcement_support_descriptor
411  *	@brief	announcement_support descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
412  * @var application_signalling_descriptor
413  *	@brief	application_signalling descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
414  * @var adaptation_field_data_descriptor
415  *	@brief	adaptation_field_data descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
416  * @var service_identifier_descriptor
417  *	@brief	service_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
418  * @var service_availability_descriptor
419  *	@brief	service_availability descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
420  * @var default_authority_descriptor
421  *	@brief	default_authority descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
422  * @var related_content_descriptor
423  *	@brief	related_content descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
424  * @var TVA_id_descriptor
425  *	@brief	TVA_id descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
426  * @var content_identifier_descriptor
427  *	@brief	content_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
428  * @var time_slice_fec_identifier_descriptor
429  *	@brief	time_slice_fec_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
430  * @var ECM_repetition_rate_descriptor
431  *	@brief	ECM_repetition_rate descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
432  * @var S2_satellite_delivery_system_descriptor
433  *	@brief	S2_satellite_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
434  * @var enhanced_AC_3_descriptor
435  *	@brief	enhanced_AC_3 descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
436  * @var DTS_descriptor
437  *	@brief	DTS descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
438  * @var AAC_descriptor
439  *	@brief	AAC descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
440  * @var XAIT_location_descriptor
441  *	@brief	XAIT_location descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
442  * @var FTA_content_management_descriptor
443  *	@brief	FTA_content_management descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
444  * @var extension_descriptor
445  *	@brief	extension descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
446  * @var CUE_identifier_descriptor
447  *	@brief	CUE_identifier descriptor - SCTE 35 2004
448  * @var extended_channel_name
449  *	@brief	extended_channel_name descriptor - SCTE 35 2004
450  * @var service_location
451  *	@brief service_location descriptor - SCTE 35 2004
452  * @var component_name_descriptor
453  *	@brief	component_name descriptor - SCTE 35 2004
454  *	@see http://www.etherguidesystems.com/Help/SDOs/ATSC/Semantics/Descriptors/Default.aspx
455  * @var logical_channel_number_descriptor
456  *	@brief	logical_channel_number descriptor - SCTE 35 2004
457  *	@see http://www.coolstf.com/tsreader/descriptors.html
458  *
459  * @var carousel_id_descriptor
460  *	@brief	carousel_id descriptor - ABNT NBR 15603-1 2007
461  * @var association_tag_descriptor
462  *	@brief	association_tag descriptor - ABNT NBR 15603-1 2007
463  * @var deferred_association_tags_descriptor
464  *	@brief	deferred_association_tags descriptor - ABNT NBR 15603-1 2007
465 
466  * @var hierarchical_transmission_descriptor
467  *	@brief	hierarchical_transmission descriptor - ABNT NBR 15603-1 2007
468  * @var digital_copy_control_descriptor
469  *	@brief	digital_copy_control descriptor - ABNT NBR 15603-1 2007
470  * @var network_identifier_descriptor
471  *	@brief	network_identifier descriptor - ABNT NBR 15603-1 2007
472  * @var partial_transport_stream_time_descriptor
473  *	@brief	partial_transport_stream_time descriptor - ABNT NBR 15603-1 2007
474  * @var audio_component_descriptor
475  *	@brief	audio_component descriptor - ABNT NBR 15603-1 2007
476  * @var hyperlink_descriptor
477  *	@brief	hyperlink descriptor - ABNT NBR 15603-1 2007
478  * @var target_area_descriptor
479  *	@brief	target_area descriptor - ABNT NBR 15603-1 2007
480  * @var data_contents_descriptor
481  *	@brief	data_contents descriptor - ABNT NBR 15603-1 2007
482  * @var video_decode_control_descriptor
483  *	@brief	video_decode_control descriptor - ABNT NBR 15603-1 2007
484  * @var download_content_descriptor
485  *	@brief	download_content descriptor - ABNT NBR 15603-1 2007
486  * @var CA_EMM_TS_descriptor
487  *	@brief	CA_EMM_TS descriptor - ABNT NBR 15603-1 2007
488  * @var CA_contract_information_descriptor
489  *	@brief	CA_contract_information descriptor - ABNT NBR 15603-1 2007
490  * @var CA_service_descriptor
491  *	@brief	CA_service descriptor - ABNT NBR 15603-1 2007
492  * @var TS_Information_descriptior
493  *	@brief transport_stream_information descriptor - ABNT NBR 15603-1 2007
494  * @var extended_broadcaster_descriptor
495  *	@brief	extended_broadcaster descriptor - ABNT NBR 15603-1 2007
496  * @var logo_transmission_descriptor
497  *	@brief	logo_transmission descriptor - ABNT NBR 15603-1 2007
498  * @var basic_local_event_descriptor
499  *	@brief	basic_local_event descriptor - ABNT NBR 15603-1 2007
500  * @var reference_descriptor
501  *	@brief	reference descriptor - ABNT NBR 15603-1 2007
502  * @var node_relation_descriptor
503  *	@brief	node_relation descriptor - ABNT NBR 15603-1 2007
504  * @var short_node_information_descriptor
505  *	@brief	short_node_information descriptor - ABNT NBR 15603-1 2007
506  * @var STC_reference_descriptor
507  *	@brief	STC_reference descriptor - ABNT NBR 15603-1 2007
508  * @var series_descriptor
509  *	@brief	series descriptor - ABNT NBR 15603-1 2007
510  * @var event_group_descriptor
511  *	@brief	event_group descriptor - ABNT NBR 15603-1 2007
512  * @var SI_parameter_descriptor
513  *	@brief	SI_parameter descriptor - ABNT NBR 15603-1 2007
514  * @var broadcaster_Name_Descriptor
515  * 	@brief broadcaster_Name descriptor - ABNT NBR 15603-1 2007
516  * @var component_group_descriptor
517  *	@brief	component_group descriptor - ABNT NBR 15603-1 2007
518  * @var SI_prime_TS_descriptor
519  *	@brief	SI_prime_transport_stream descriptor - ABNT NBR 15603-1 2007
520  * @var board_information_descriptor
521  *	@brief	board_information descriptor - ABNT NBR 15603-1 2007
522  * @var LDT_linkage_descriptor
523  *	@brief	LDT_linkage descriptor - ABNT NBR 15603-1 2007
524  * @var connected_transmission_descriptor
525  *	@brief	connected_transmission descriptor - ABNT NBR 15603-1 2007
526  * @var content_availability_descriptor
527  *	@brief	content_availability descriptor - ABNT NBR 15603-1 2007
528  * @var service_group_descriptor
529  *	@brief	service_group descriptor - ABNT NBR 15603-1 2007
530  * @var carousel_compatible_composite_descriptor
531  *	@brief	carousel_compatible_composite descriptor - ABNT NBR 15603-1 2007
532  * @var conditional_playback_descriptor
533  *	@brief	conditional_playback descriptor - ABNT NBR 15603-1 2007
534  * @var ISDBT_delivery_system_descriptor
535  *	@brief	ISDBT terrestrial_delivery_system descriptor - ABNT NBR 15603-1 2007
536  * @var partial_reception_descriptor
537  *	@brief	partial_reception descriptor - ABNT NBR 15603-1 2007
538  * @var emergency_information_descriptor
539  *	@brief	emergency_information descriptor - ABNT NBR 15603-1 2007
540  * @var data_component_descriptor
541  *	@brief	data_component descriptor - ABNT NBR 15603-1 2007
542  * @var system_management_descriptor
543  *	@brief	system_management descriptor - ABNT NBR 15603-1 2007
544  *
545  * @var atsc_stuffing_descriptor
546  *	@brief	atsc_stuffing descriptor - ATSC A/65:2009
547  * @var atsc_ac3_audio_descriptor
548  *	@brief	atsc_ac3_audio descriptor - ATSC A/65:2009
549  * @var atsc_caption_service_descriptor
550  *	@brief	atsc_caption_service descriptor - ATSC A/65:2009
551  * @var atsc_content_advisory_descriptor
552  *	@brief	atsc_content_advisory descriptor - ATSC A/65:2009
553  * @var atsc_extended_channel_descriptor
554  *	@brief	atsc_extended_channel descriptor - ATSC A/65:2009
555  * @var atsc_service_location_descriptor
556  *	@brief	atsc_service_location descriptor - ATSC A/65:2009
557  * @var atsc_time_shifted_service_descriptor
558  *	@brief	atsc_time_shifted_service descriptor - ATSC A/65:2009
559  * @var atsc_component_name_descriptor
560  *	@brief	atsc_component_name descriptor - ATSC A/65:2009
561  * @var atsc_DCC_departing_request_descriptor
562  *	@brief	atsc_DCC_departing_request descriptor - ATSC A/65:2009
563  * @var atsc_DCC_arriving_request_descriptor
564  *	@brief	atsc_DCC_arriving_request descriptor - ATSC A/65:2009
565  * @var atsc_redistribution_control_descriptor
566  *	@brief	atsc_redistribution_control descriptor - ATSC A/65:2009
567  * @var atsc_ATSC_private_information_descriptor
568  *	@brief	atsc_ATSC_private_information descriptor - ATSC A/65:2009
569  * @var atsc_genre_descriptor
570  *	@brief	atsc_genre descriptor - ATSC A/65:2009
571  */
572 enum descriptors
573 {
574     /* ISO/IEC 13818-1 */
575     video_stream_descriptor = 0x02,
576     audio_stream_descriptor = 0x03,
577     hierarchy_descriptor = 0x04,
578     registration_descriptor = 0x05,
579     ds_alignment_descriptor = 0x06,
580     target_background_grid_descriptor = 0x07,
581     video_window_descriptor = 0x08,
582     conditional_access_descriptor = 0x09,
583     iso639_language_descriptor = 0x0a,
584     system_clock_descriptor = 0x0b,
585     multiplex_buffer_utilization_descriptor = 0x0c,
586     copyright_descriptor = 0x0d,
587     maximum_bitrate_descriptor = 0x0e,
588     private_data_indicator_descriptor = 0x0f,
589     smoothing_buffer_descriptor = 0x10,
590     std_descriptor = 0x11,
591     ibp_descriptor = 0x12,
592 
593     mpeg4_video_descriptor = 0x1b,
594     mpeg4_audio_descriptor = 0x1c,
595     iod_descriptor = 0x1d,
596     sl_descriptor = 0x1e,
597     fmc_descriptor = 0x1f,
598     external_es_id_descriptor = 0x20,
599     muxcode_descriptor = 0x21,
600     fmxbuffersize_descriptor = 0x22,
601     multiplexbuffer_descriptor = 0x23,
602     content_labeling_descriptor = 0x24,
603     metadata_pointer_descriptor = 0x25,
604     metadata_descriptor = 0x26,
605     metadata_std_descriptor = 0x27,
606     AVC_video_descriptor = 0x28,
607     ipmp_descriptor = 0x29,
608     AVC_timing_and_HRD_descriptor = 0x2a,
609     mpeg2_aac_audio_descriptor = 0x2b,
610     flexmux_timing_descriptor = 0x2c,
611 
612     /* ETSI EN 300 468 V1.11.1 (2010-04) */
613 
614     network_name_descriptor = 0x40,
615     service_list_descriptor = 0x41,
616     stuffing_descriptor = 0x42,
617     satellite_delivery_system_descriptor = 0x43,
618     cable_delivery_system_descriptor = 0x44,
619     VBI_data_descriptor = 0x45,
620     VBI_teletext_descriptor = 0x46,
621     bouquet_name_descriptor = 0x47,
622     service_descriptor = 0x48,
623     country_availability_descriptor = 0x49,
624     linkage_descriptor = 0x4a,
625     NVOD_reference_descriptor = 0x4b,
626     time_shifted_service_descriptor = 0x4c,
627     short_event_descriptor = 0x4d,
628     extended_event_descriptor = 0x4e,
629     time_shifted_event_descriptor = 0x4f,
630     component_descriptor = 0x50,
631     mosaic_descriptor = 0x51,
632     stream_identifier_descriptor = 0x52,
633     CA_identifier_descriptor = 0x53,
634     content_descriptor = 0x54,
635     parental_rating_descriptor = 0x55,
636     teletext_descriptor = 0x56,
637     telephone_descriptor = 0x57,
638     local_time_offset_descriptor = 0x58,
639     subtitling_descriptor = 0x59,
640     terrestrial_delivery_system_descriptor = 0x5a,
641     multilingual_network_name_descriptor = 0x5b,
642     multilingual_bouquet_name_descriptor = 0x5c,
643     multilingual_service_name_descriptor = 0x5d,
644     multilingual_component_descriptor = 0x5e,
645     private_data_specifier_descriptor = 0x5f,
646     service_move_descriptor = 0x60,
647     short_smoothing_buffer_descriptor = 0x61,
648     frequency_list_descriptor = 0x62,
649     partial_transport_stream_descriptor = 0x63,
650     data_broadcast_descriptor = 0x64,
651     scrambling_descriptor = 0x65,
652     data_broadcast_id_descriptor = 0x66,
653     transport_stream_descriptor = 0x67,
654     DSNG_descriptor = 0x68,
655     PDC_descriptor = 0x69,
656     AC_3_descriptor = 0x6a,
657     ancillary_data_descriptor = 0x6b,
658     cell_list_descriptor = 0x6c,
659     cell_frequency_link_descriptor = 0x6d,
660     announcement_support_descriptor = 0x6e,
661     application_signalling_descriptor = 0x6f,
662     adaptation_field_data_descriptor = 0x70,
663     service_identifier_descriptor = 0x71,
664     service_availability_descriptor = 0x72,
665     default_authority_descriptor = 0x73,
666     related_content_descriptor = 0x74,
667     TVA_id_descriptor = 0x75,
668     content_identifier_descriptor = 0x76,
669     time_slice_fec_identifier_descriptor = 0x77,
670     ECM_repetition_rate_descriptor = 0x78,
671     S2_satellite_delivery_system_descriptor = 0x79,
672     enhanced_AC_3_descriptor = 0x7a,
673     DTS_descriptor = 0x7b,
674     AAC_descriptor = 0x7c,
675     XAIT_location_descriptor = 0x7d,
676     FTA_content_management_descriptor = 0x7e,
677     extension_descriptor = 0x7f,
678 
679     /* SCTE 35 2004 */
680     CUE_identifier_descriptor = 0x8a,
681 
682     extended_channel_name = 0xa0,
683     service_location = 0xa1,
684     /* From http://www.etherguidesystems.com/Help/SDOs/ATSC/Semantics/Descriptors/Default.aspx */
685     component_name_descriptor = 0xa3,
686 
687     /* From http://www.coolstf.com/tsreader/descriptors.html */
688     logical_channel_number_descriptor = 0x83,
689 
690     /* ISDB Descriptors, as defined on ABNT NBR 15603-1 2007 */
691 
692     carousel_id_descriptor = 0x13,
693     association_tag_descriptor = 0x14,
694     deferred_association_tags_descriptor = 0x15,
695 
696     hierarchical_transmission_descriptor = 0xc0,
697     digital_copy_control_descriptor = 0xc1,
698     network_identifier_descriptor = 0xc2,
699     partial_transport_stream_time_descriptor = 0xc3,
700     audio_component_descriptor = 0xc4,
701     hyperlink_descriptor = 0xc5,
702     target_area_descriptor = 0xc6,
703     data_contents_descriptor = 0xc7,
704     video_decode_control_descriptor = 0xc8,
705     download_content_descriptor = 0xc9,
706     CA_EMM_TS_descriptor = 0xca,
707     CA_contract_information_descriptor = 0xcb,
708     CA_service_descriptor = 0xcc,
709     TS_Information_descriptior = 0xcd,
710     extended_broadcaster_descriptor = 0xce,
711     logo_transmission_descriptor = 0xcf,
712     basic_local_event_descriptor = 0xd0,
713     reference_descriptor = 0xd1,
714     node_relation_descriptor = 0xd2,
715     short_node_information_descriptor = 0xd3,
716     STC_reference_descriptor = 0xd4,
717     series_descriptor = 0xd5,
718     event_group_descriptor = 0xd6,
719     SI_parameter_descriptor = 0xd7,
720     broadcaster_Name_Descriptor = 0xd8,
721     component_group_descriptor = 0xd9,
722     SI_prime_TS_descriptor = 0xda,
723     board_information_descriptor = 0xdb,
724     LDT_linkage_descriptor = 0xdc,
725     connected_transmission_descriptor = 0xdd,
726     content_availability_descriptor = 0xde,
727     service_group_descriptor = 0xe0,
728     carousel_compatible_composite_descriptor = 0xf7,
729     conditional_playback_descriptor = 0xf8,
730     ISDBT_delivery_system_descriptor = 0xfa,
731     partial_reception_descriptor = 0xfb,
732     emergency_information_descriptor = 0xfc,
733     data_component_descriptor = 0xfd,
734     system_management_descriptor = 0xfe,
735 
736     /* ATSC descriptors - ATSC A/65:2009 spec */
737     atsc_stuffing_descriptor = 0x80,
738     atsc_ac3_audio_descriptor = 0x81,
739     atsc_caption_service_descriptor = 0x86,
740     atsc_content_advisory_descriptor = 0x87,
741     atsc_extended_channel_descriptor = 0xa0,
742     atsc_service_location_descriptor = 0xa1,
743     atsc_time_shifted_service_descriptor = 0xa2,
744     atsc_component_name_descriptor = 0xa3,
745     atsc_DCC_departing_request_descriptor = 0xa8,
746     atsc_DCC_arriving_request_descriptor = 0xa9,
747     atsc_redistribution_control_descriptor = 0xaa,
748     atsc_ATSC_private_information_descriptor = 0xad,
749     atsc_genre_descriptor = 0xab
750 }
751 
752 /* Please see desc_extension.h for extension_descriptor types */